﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DoNetToolKit.Patterns.Singleton
{
    /**
     * 单例模式：
     * 一个类只有一个实例。 
     **/

    // 懒汉式:从资源利用效率角度来讲稍好些，在使用的几率很少的情况下用。
    class Singleton
    {
        // 声明一个私有的，静态的本类对象，但并不在声明的时候就初始化
        private static Singleton singleton;

        // 私有化构造器
        private Singleton() { }

        // 对外提供一个用来获得该类实例的静态方法
        public static Singleton GetInstance()
        {
            // 该类实例的对象为空，即这个类还没有被实例化时
            if (singleton == null)
            {
                // 初始化该对象
                singleton = new Singleton();
            }
            Console.WriteLine("获取该类实例成功！");
            return singleton;
        }
    }

    // 饿汉式:从速度和反应时间角度来讲稍好些，在使用的几率很高的情况下用。
    //class Singleton
    //{
    //    // 声明一个私有的，静态的本类对象，在声明的时候就初始化.
    //    private static Singleton singleton = new Singleton();

    //    // 私有化构造器
    //    private Singleton() { }

    //    // 对外提供一个用来获得该类实例的静态方法
    //    public static Singleton GetInstance()
    //    {
    //        Console.WriteLine("获取该类实例成功！");
    //        // 直接返回该类的实例对象
    //        return singleton;
    //    }
    //}
}
